package demo;

/**
 * 饿汉模式
 * 程序启动，类加载的时候，创建实例
 */
class Singleton{
    private static Singleton instance=new Singleton();

    private Singleton() {}

    public static Singleton getInstance(){
        return instance;
    }
}


/**
 * 懒汉模式(线程安全)
 * 在程序第一次使用这个实例的时候，才会创建
 */
class SingletonLan{
    public static Object locker=new Object();
    private static volatile SingletonLan instance=null;//1.volatile内存可见性问题
    private SingletonLan() {}
    public static SingletonLan getInstance() {
        if (instance==null){//2.判断是否要加锁
            synchronized (locker) {//3.加锁，把if判定和new赋值操作打包成原子操作
                if (instance == null) {//4.是否要创建对象
                    instance = new SingletonLan();
                }
            }
        }
        return instance;
    }
}

public class demo1 {
}
